home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / MacHaskell 2.2 / progs / demo / merge.hs < prev    next >
Encoding:
Text File  |  1994-09-27  |  582 b   |  26 lines  |  [TEXT/YHS2]

  1. {- This is a simple merge sort -}
  2.  
  3. module Merge where
  4.                 
  5. merge :: [Integer] -> [Integer] -> [Integer]
  6. merge [] x = x  
  7. merge x [] = x
  8. merge l1@(a:b) l2@(c:d) | a < c     = a:(merge b l2)
  9.             | otherwise = c:(merge l1 d)
  10.  
  11. halves [] = ([],[])
  12. halves [x] = ([x],[])
  13. halves (x:y:z) = (x:xs,y:ys) where (xs,ys) = halves z
  14.  
  15. sort [] = []
  16. sort [x] = [x]
  17. sort l = merge (sort odds) (sort evens) where
  18.          (odds, evens) = halves l
  19.  
  20. main =
  21.   putStr "Enter a list of integers separated by \",\"\n" >>
  22.   getLine >>= \l ->
  23.   putStr (show (sort (read ("[" ++ l ++ "]"))) ++ "\n")
  24.  
  25.  
  26.